home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 22
/
Cream of the Crop 22.iso
/
bbs
/
pprd199.zip
/
JDLPRD.PL
< prev
next >
Wrap
Perl Script
|
1995-01-09
|
1KB
|
64 lines
#!/usr/local/bin/perl
#
# Server to translate direct connections to port 9100 to
# a lpr job.
# Invoke with -i if not running from inetd.
# Edit the lprcmd and port number if necessary.
#
require 'sys/socket.ph';
$port = 9100;
$lprcmd = "| lpr";
$sockaddr = 'S n a4 x8';
if ($#ARGV >= 0 && $ARGV[0] eq "-i")
{
&standalone();
}
else
{
&serve(*stdin);
}
exit 0;
sub serve
{
local(*F) = @_;
$addr = getpeername(F);
($af, $port, $inetaddr) = unpack($sockaddr, $addr);
# print STDERR "$af $port @inetaddr\n";
($name, $aliases, $addrtype, $length, @addrs) = gethostbyaddr($inetaddr, &AF_INET);
open(L, $lprcmd) || die "open: $!";
for (;;)
{
$nread = read(F, $buffer, 1024);
last if $nread == 0;
print(L $buffer);
}
close(L);
}
sub standalone
{
($name, $aliases, $proto) = getprotobyname('tcp');
$this = pack($sockaddr, &AF_INET, $port, "\0\0\0\0");
select(NS); $| = 1; select(stdout);
socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!";
bind(S, $this) || die "bind: $!";
listen(S, 5) || die "connect: $!";
select(S); $| = 1; select(stdout);
for (;;)
{
# print STDERR "Listening again\n";
($addr = accept(NS,S)) || die $!;
# print STDERR "Accept ok\n";
($af,$port,$inetaddr) = unpack($sockaddr,$addr);
@inetaddr = unpack('C4',$inetaddr);
# print STDERR "$af $port @inetaddr\n";
&serve(*NS);
}
}